//package com.example.usage.aop.transaction.anno;
//
//import com.example.usage.aop.transaction.User;
//import com.example.usage.aop.transaction.UserDao;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Isolation;
//import org.springframework.transaction.annotation.Propagation;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.List;
//
///**
// * （1）@Transactional，这个注解添加到类上面，也可以添加方法上面
// * （2）如果把这个注解添加类上面，这个类里面所有的方法都添加事务
// * （3）如果把这个注解添加方法上面，为这个方法添加事务
// *
// *  传播行为 propagation(共7种)：
// *      REQUIRED：默认，如果有事务在运行，当前方法就在这个事务内运行，否则就启动一个新的事务，并在自己的事务内运行
// *      REQUIRES_NEW：当前的方法必须启动新事务，并在自己的事务内运行。如果有事务正在运行，则将它挂起
// *      ...
// *  隔离级别 isolation：
// *      脏读：一个未提交事务读取到另一个未提交事务的数据
// *      不可重复读：一个未提交事务读取到另一提交事务修改数据
// *      虚读：一个未提交事务读取到另一提交事务添加数据
// *    解决：通过设置事务隔离级别
// */
//@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.REPEATABLE_READ)
//@Service("userServiceAnno")
//public class UserService {
//    @Autowired
//    private UserDao userDao;
//
//    public List<User> getUsers(){
//        return userDao.getUsers();
//    }
//
//    public void transMoney(){
//        userDao.addMoney();
//        int i = 1/0;
//        userDao.reduceMoney();
//    }
//}
